package com.jframe.sys.controller.utils;

import java.util.List;

import com.jframe.sys.utils.StringUtil;
import com.jframe.sys.webui.Columns;
import com.jframe.sys.webui.Grid;

public class JsBuilder {
	
	public static String getJsStr(List<Columns> frozenColumns,List<Columns> commonColumns,Grid grid){
		//固定列
		StringBuffer frozenstr = new StringBuffer();	
		frozenstr.append("[");		
		for(Columns colums:frozenColumns){
			if(colums.getField().equals("ck")){
				frozenstr.append("{field:'ck',checkbox:true},");
				grid.setSingleSelect(false);
			}
			else{
				frozenstr.append(getColumnsJson(colums));
				frozenstr.append(",");
			}
		}
		if(frozenColumns.size()>0){			
			frozenstr.substring(0,frozenstr.length()-1);
		}		
		frozenstr.append("]");
		grid.setFrozenColumns(frozenstr.toString());
		
		//活动列
		StringBuffer commonstr = new StringBuffer();
		commonstr.append("[");
		for(Columns colums:commonColumns){
			commonstr.append(getColumnsJson(colums)+",");
		}
		if(commonColumns.size()>0){
			commonstr.substring(0,commonstr.length()-1);
		}
		commonstr.append("]");
		grid.setColumns(commonstr.toString());
		String gridjson = getGridStr(grid);
		String dicjson = getFormatterStr(frozenColumns,commonColumns);
		if(grid.isEditable()==true){
			dicjson +=" var lastIndex;  ";
		}
		return dicjson+" "+gridjson;
	}
	
	private static String getFormatterStr(List<Columns> frozenColumns,List<Columns> commonColumns){
		
		StringBuffer str = new StringBuffer();
		for(Columns colums:frozenColumns){
			if(!colums.getData().equals("")){
				str.append("var ");
				str.append(colums.getField());
				str.append("s=");
				str.append(colums.getData());
				str.append(";function ");
				str.append(colums.getField());
				str.append("sFormatter(value){for(var i=0; i<");
				str.append(colums.getField());
				str.append("s.length; i++){ if (");
				str.append(colums.getField());
				str.append("s[i].id == ''+value) return ");
				str.append(colums.getField());
				str.append("s[i].text;} return value;}");
			}
		}
		for(Columns colums:commonColumns){
			if(!StringUtil.null2Space(colums.getData()).equals("")){
				str.append("var ");
				str.append(colums.getField());
				str.append("s=");
				str.append(colums.getData());
				str.append(";function ");
				str.append(colums.getField());
				str.append("sFormatter(value){for(var i=0; i<");
				str.append(colums.getField());
				str.append("s.length; i++){if (");
				str.append(colums.getField());
				str.append("s[i].id == ''+value) return ");
				str.append(colums.getField());
				str.append("s[i].text;} return value;}");
			}
		}
		return str.toString();
	}
	
	private static String getGridStr(Grid grid){
		StringBuffer str = new StringBuffer();
		str.append("var lastIndex; $('#"+grid.getId()+"').datagrid({");
		str.append("fit:");
		str.append(grid.isFit());
		if(!grid.getTitle().equals("")){
			str.append(",title:'");
			str.append(grid.getTitle());
			str.append("',iconCls:'icon-sidetree'");
		}
		str.append(",nowrap:");
		str.append(grid.isNowrap());
		str.append(",collapsible:");
		str.append(grid.isCollapsible());
		str.append(",striped:");
		str.append(grid.isStriped());
		str.append(",method:'");
		str.append(grid.getMethod());
		str.append("',url:'");
		str.append(grid.getUrl());
		str.append("'");
		if(!grid.getSortName().equals("")){
			str.append(",sortName:'");
			str.append(grid.getSortName());
			str.append("',sortOrder:'");
			str.append(grid.getSortOrder());
			str.append("'");
		}
		str.append(",idField:'");
		str.append(grid.getIdField());
		str.append("',frozenColumns:");
		str.append(grid.getFrozenColumns());
		str.append(",columns:");
		str.append(grid.getColumns());
		str.append(",pagination:");
		str.append(grid.isPagination());
		str.append(",rownumbers:");
		str.append(grid.isRownumbers());
		str.append(",singleSelect:");
		str.append(grid.isSingleSelect());
		str.append(",loadMsg:'");
		str.append(grid.getLoadMsg());
		str.append("'");
		str.append("});");
		return str.toString();
	}
	 
	private static String getColumnsJson(Columns colums){
		StringBuffer json = new StringBuffer();
		json.append("{");
		json.append("field:'");
		json.append(colums.getField());
		json.append("',title:'");
		json.append(colums.getTitle());
		json.append("',width:");
		json.append(colums.getWidth());
		json.append(",");
		if(colums.getRowspan()>1){
			json.append("rowspan:");
			json.append(colums.getRowspan());
			json.append(",");
		}
		if(colums.getColspan()>1){
			json.append("colspan:");
			json.append(colums.getColspan());
			json.append(",");
		}
		json.append("align:'");
		json.append(colums.getAlign());
		json.append("'");
		if(colums.isHidden()==true){
			json.append(",sortable:");
			json.append(colums.getSortable());
		}
		if(colums.isHidden()==true){
			json.append(",hidden:");
			json.append(colums.isHidden());
		}
		if(StringUtil.null2Space(colums.getFormatter()).equals("")){
			json.append(",editor:");
			json.append(colums.getEditor());
		}
		if(colums.getEditor().indexOf("combobox")!=-1||colums.getEditor().indexOf("combotree")!=-1||colums.getEditor().indexOf("combogrid")!=-1&&StringUtil.null2Space(colums.getFormatter()).equals("")){
			json.append(",formatter:");
			json.append(colums.getField());
			json.append("sFormatter");
		}else if(!StringUtil.null2Space(colums.getFormatter()).equals("")){  //针对自定义formatter函数
			json.append(",formatter:");
			json.append(colums.getFormatter());
		}		
		json.append("}");
		return json.toString();
	}
	
}
